package busterminal.command.busmodel;

import busterminal.command.AbstractCommand;
import busterminal.entity.BusModel;
import busterminal.entity.BusModelImplementation;
import busterminal.entity.service.VehicleType;
import busterminal.persistence.BusModelDAO;
import busterminal.services.ServiceLocator;
import java.util.Arrays;
import java.util.List;

/**
 * Класс, реализуюий действие: создание новой модели автобуса
 */
public class CreateBusModelCommand extends AbstractCommand {

    /**
     * Имя параметра "Модель автобуса"
     */
    public final static String PARAM_MODEL_NAME = "Model name";
    /**
     * Имя параметра "Тип транспортного средства"
     */
    private final static String PARAM_VEHICLE_TYPE = "Vehicle type";

    /**
     * Конструктор по умолчанию
     */
    public CreateBusModelCommand() {
        super("Add new bus model");
    }

    /**
     * Выполнить команду: создать новую модель автобуса
     */
    @Override
    public void execute() {
        BusModel busModel = new BusModelImplementation();
        busModel.setModelName(parameters.get(PARAM_MODEL_NAME));
        String vehicleType = parameters.get(PARAM_VEHICLE_TYPE);
        try {
            busModel.setVehicleType(VehicleType.valueOf(vehicleType.toUpperCase()));
        } catch (Exception e) {
            System.err.println("Incorrect vehicle type " + vehicleType);
        }

        BusModelDAO busModelDAO = ServiceLocator.getService(BusModelDAO.class);
        busModelDAO.create(busModel);
    }

    /**
     * Получить список имён параметров
     * @return список имён параметров
     */
    @Override
    public List<String> getParametersNames() {
        return Arrays.asList(PARAM_MODEL_NAME, PARAM_VEHICLE_TYPE);
    }
    
    /**
     * Вывести список доступных вариантов параметра с фиксированным набором значений
     * @param parameterName имя параметра с фиксированным набором значений
     */
    @Override
    public void showAccessableVariants(String parameterName) {
        if (PARAM_VEHICLE_TYPE.equals(parameterName)) {
            System.out.println("Accessable variants: " + VehicleType.getValues());
        }
    }    
}
